package annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 注解
 *
 * 默认情况下，凡是能用注解的地方都能使用该注解
 *
 * 在注解上可以使用java预定义的注解来规范某些操作，常用的有:
 * @Target 用于指定当前注解可以被应用的位置。
 *         不指定该注解时，自定义的注解可以被应用于任何可以使用注解的位置，
 *         比如：类上，方法上，构造器上，属性上，参数上等
 *         可以通过为Target注解传入参数来指定可以使用的特定位置，这些位置
 *         都被ElementType规定。
 *         @Target(ElementType.TYPE)
 *         只能在类上使用该注解
 *
 *         @Target({ElementType.TYPE,ElementType.FIELD})
 *         可以在类上或属性上使用该注解(多个位置时要以数组形式表达)
 *
 * @Retention 用于指定当前注解的保留级别，有三个可选值
 *         RetentionPolicy.SOURCE   注解仅保留在源代码中
 *         RetentionPolicy.CLASS    注解保留在字节码中，但是不可被反射机制访问(默认保留级别)
 *         RetentionPolicy.RUNTIME  注解保留在字节码中，可被反射机制访问
 *
 * */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface AutoRunClass {
}
